import java.util.HashSet;
import java.util.Set;

/**
 * 判断一个链表上是否有环。
 * 有环的链表是遍历不完的。思路1，通过set通过计数的方式，在循环链表中，
 * 我们对每个节点的next判断set 中是否包含，如果包含就证明有环，退出循环。
 */
public class JavaDemo7 {
    public static void main(String[] args) {
        int[] arrays = {1, 2, 2, 3, 3, 4, 5, 5};
        ListNode head = new ListNode(arrays[0]);
        ListNode next = head;

        for (int i = 1; i < arrays.length; i++) {
           ListNode  node = new ListNode(arrays[i]);
            next.next = node;
            next = node;
        }
        // 在这里。我们最后的节点设置为首节点。
       next.next=head;
        System.out.println( haveLoop(head));
    }

    private static boolean haveLoop(ListNode head) {
        ListNode node=head;
        Set<ListNode> nodes=new HashSet<>();
        nodes.add(head);
        while (node.next!=null){
            if (!nodes.contains(node.next)){
                nodes.add(node.next);
                node = node.next;
            }else {
                return true;
            }
        }
        return false;
    }


}
